package reversi;
import java.util.ArrayList;
import java.util.List;


public class Paridade extends Estrategia{
	

	public Paridade(double pesoComeco, double pesoMeio, double pesoFim,
			double escala) {
		super(pesoComeco, pesoMeio, pesoFim, escala);
	}

	int[][] visitado = new int[8][8] ;
	GameState estado;
	int regiao = 0;				

	@Override
	public int avaliaEstado(GameState estado, int indiceJogador, Move movimento) {
		this.estado =estado;
		regiao=0;
		inicializaVisitado();
		
		regiao++;
		visitado[movimento.getX()][movimento.getY()]=1;
		if(movimento.getX()>0) flood(movimento.getX()-1,movimento.getY());
		if(movimento.getY()>0) flood(movimento.getX(),movimento.getY()-1);
		if(movimento.getX()<7) flood(movimento.getX()+1,movimento.getY());
		if(movimento.getY()<7) flood(movimento.getX(),movimento.getY()+1);	
		
		if(regiao%2==1) return 1;
		else return -1;
	}
	
	private void flood(int x, int y){
		//System.out.println( x + " " + y +" "+estado.getMarkAt(x,y));
		if(estado.getMarkAt(x,y)==-1 && visitado[x][y]!=1){
			regiao++;
			visitado[x][y]=1;
			if(x>0) flood(x-1,y);
			if(y>0) flood(x,y-1);
			if(x<7) flood(x+1,y);
			if(y<7) flood(x,y+1);	
		}
	}
	
	private void inicializaVisitado(){
		for(int i = 0; i<8; i++)
			for(int j = 0 ; j<8; j++){
				visitado[i][j]=0;
			}
	}
	
	public String toString(){
		return "Par: "+this.getPesoComeco()+" "+this.getPesoMeio()+" "+this.getPesoFim()+"\n";
	}
}

